查看原文
其他

【新功能上线】mooncakes.io:新一代MoonBit包管理平台来啦!!

MoonBit运营组 MoonBit 2024-01-09









mooncakes.io正式上线啦!!











🎉今天,我们很高兴地宣布:mooncakes.io (MoonBit的包管理与共享平台)正式上线!

MoonBit最大的价值在于生态,更多的人更早地参与进来可以帮助我们一起完善MoonBit平台,一起分享它的成长。虽然还处于非常早期的阶段,还有很多地方需要完善,但是我们想第一时间分享给大家!

接下来,让我们一起深入了解mooncakes.io的独特之处。

01mooncakes.io:中心化的MoonBit包管理平台


mooncakes.io作为一个中心化的MoonBit包管理平台。在这里,用户可以轻松上传分享、使用以及探索各种MoonBit模块。



为此,MoonBit的构建系统moon集成了与 mooncakes.io 进行交互的命令,让用户可以免去手动下载和配置依赖的困扰。与其他大多数包管理器不同,MoonBit的依赖解析使用与Go类似的最小版本选择算法,可以精确地确定需要构建哪些依赖,不会隐式地升级新版本,从而为开发者打造稳定可重现的构建体验。


mooncakes.io 托管了所有用户发布的MoonBit模块,这些模块也可以称之为“月饼”。用户发布到 mooncakes.io 的内容以模块为最小单位,每个模块下可以有多个包。每个用户在 mooncakes.io 有自己独立的命名空间,用户上传的模块的名称格式为 <username>/<package_name>。在 mooncakes.io 发布的模块版本根据语义化版本2.0.0定义,月兔将根据兼容性解析具体的版本。

除此之外,mooncakes.io 还是一个文档托管平台,当用户成功发布一个模块之后,mooncakes.io 会自动构建该模块的文档页面。我们希望这样一个中心化平台能为用户提供简单、一致的使用体验。


02与mooncakes.io深度整合的工具链

为进一步增强用户体验,我们还提供与 mooncakes.io 深度整合的工具链。





相关工具链


MoonBit构建系统 moon 集成了与mooncakes.io进行交互的命令。


moon login:登录到 mooncakes.io
moon publish:发布一个包到 mooncakes.io。其中版本号格式按照语义化版本2.0.0进行校验,对于同一个模块,每次发布的版本号必须单调递增。
moon add:添加一个依赖。例如 moon add Yoorkin/example/list@0.1.2,如果不指定版本 moon add Yoorkin/example/list 将会添加最新版本。构建系统会执行依赖解析,找到所有需要依赖的模块及其版本,然后从 mooncakes.io 下载相关模块到当前模块,同时自动更新 moon.mod.json。

moon remove:移除一个依赖

moon tree:以树状结构列出所有依赖

moon update:更新本地索引。索引中记录了 mooncakes.io 上所有的包的版本及其依赖信息。索引文件使用 git进行管理,因此在完成第一次更新之后,后续的 moon update 便可只进行增量更新,这需要您的环境中有 git 命令。

moon install:按照 moon.mod.json 中 deps 字段自动安装所有依赖。







moondoc文档生成工具

moondoc是一个从MoonBit项目收集文档注释并生成文档信息的工具。在生成文档时,moondoc不仅分析顶层声明中的类型信息,还提供指向相应类型文档的链接。


用户可以在任何顶层的fnletenumtrait等结构前添加以///开头的文档注释,这些注释遵循Markdown格式。如下图所示:


当文档在mooncakes.io被自动构建后,用户点击顶层签名中的类型,例如self参数带下划线的类型Stack,便可以跳转到Stack类型的文档。如下图所示:


构建系统 moon 中已经集成了用于本地文档生成的命令moon doc以及用于文档预览的命令 moon doc --serve


所有依赖管理、模块上传、文档的构建和预览都可以通过构建系统完成。接下来是一个简单的使用流程:



03如何使用mooncakes.io

在使用 mooncakes.io 之前需要确保安装了MoonBit工具链。


工具链下载链接:

https://www.moonbitlang.cn/download/






步骤1:配置mooncakes.io

(注意:如果你只是想使用 mooncakes.io 上的第三方包,而不是想发布一个包,可以跳过登录这一步骤。


  • 在控制台输入 moon login,在浏览器中打开输出提示的链接,在这一步我们只会要求获取您的GitHub账号的公开信息。

$ moon login
Please open the following URL in your browser and paste the code.
https://github.com/login/oauth/authorize?client_id=f324b352b4d737e98223


  • 复制login code,粘贴回控制台

  • 当显示如下内容,即表示登录成功

$ moon login
Please open the following URL in your browser and paste the code.
https://github.com/login/oauth/authorize?client_id=f324b352b4d737e98223
> xxxxxxxxxxxxxxxxxxxxx
API token saved in ~/.moon/credentials.json






步骤2:更新索引

在控制台输入 moon update,这个命令用于更新本地索引信息。


当命令执行成功后,输出类似如下:

$ moon update
Cloning into '$HOME/.moon/registry/index'...
remote: Enumerating objects: 404, done.
remote: Counting objects: 100% (404/404), done.
remote: Compressing objects: 100% (301/301), done.
remote: Total 404 (delta 138), reused 0 (delta 0), pack-reused 0
Receiving objects: 100% (404/404), 32.18 KiB | 2.92 MiB/s, done.
Resolving deltas: 100% (138/138), done.
Registry index cloned successfully






步骤3:从mooncakes添加想要的模块

浏览mooncakes.io上的所有模块,查看你感兴趣的包的文档。以mooncakes.io上的Yoorkin/example/list这个模块为例,执行moon add添加这个模块的最新版本到依赖中:
moon add Yoorkin/example/list

模块会被自动下载并添加声明到moon.mod.json的依赖项deps






步骤4:使用刚刚添加的依赖进行开发

在main这个package下导入Yoorkin/example/list这个package,这里给它取一个别名list。


参考这个模块的文档,我们借助它提供的of_arrayreverse函数反转并打印一个array



如下图,我们实现一个新的函数reverse_array。在控制台输入moon run main执行代码,效果如下:






步骤5:上传新的模块

如果准备好发布一个模块了,使用moon publish即可上传:



等待mooncakes.io完成这个模块的构建后,即可看到新上传的模块的文档信息。你也可以使用moon doc --serve在本地构建和预览效果:


注意:如果先前已经上传过这个模块,重新上传的模块的版本号需要大于已有的版本号。





详细文档

关于如何使用mooncakes.io的更多信息,请参阅mooncakes.io上提供的详细文档。


链接:https://mooncakes.io/docs/#/guide



注意:文档会进行不断地更新与迭代。如发生变更,请以官网文档为准。


04开启你的mooncakes之旅

mooncakes.io的发布是推动MoonBit生态系统向前发展的关键一步,虽然这只是一个新的开始。接下来,我们会不断优化与改进mooncakes.io,以提供给用户更友好的体验。我们期待你的试用与反馈,你的建议是我们不断前行的动力,帮助我们不断地完善与改进。


同时,我们诚邀所有对MoonBit感兴趣的用户加入这个充满活力的社区。无论你是上传自己开发的包,还是为现有的包提供改进和建议,你的每一次贡献都将对mooncakes.io的生态系统产生积极影响。


快来开启你的mooncakes.io之旅,共同构建一个不断成长的mooncakes.io社区!








官方平台账号,欢迎扫码关注


MoonBit


知乎|@张宏波 / @MoonBit

小红书|MoonBit月兔

Twitter丨@Moonbitlang

Bilibili丨MoonBit月兔

MoonBit用户交流群|添加小助手moonbit_helper

继续滑动看下一个

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存